package com.coffee.wx.uitls;

import cn.hutool.core.img.Img;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpRequest;

import java.io.File;
import java.net.MalformedURLException;

/**
 * 图片工具类
 */
public class ImageUtils {

    /**
     * 图片合成
     *
     * @param backGroundUrl 背景图片
     * @param qrCodeUrl     二维码
     * @param avatarUrl     头像
     * @return
     */
    public static String imageSynthesis(String backGroundUrl, String qrCodeUrl, String avatarUrl) {
        if (backGroundUrl == null || qrCodeUrl == null || avatarUrl == null) {
            return null;
        }
        String path = FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR;
        String backGroundPath = path + RandomUtil.randomString(20) + ".jpg";
        String qrCodePath = path + RandomUtil.randomString(20) + ".jpg";
        String avatarPath = path + RandomUtil.randomString(20) + ".jpg";
        String endPath = path + RandomUtil.randomString(20) + ".jpg";

        // 读取背景图片
        readImageToPath(backGroundUrl, backGroundPath, 200, 300);
        // 读取二维码图片
        readImageToPath(qrCodeUrl, qrCodePath, 50, 50);
        // 读取头像图片
        readImageToPath(avatarUrl, avatarPath, 50, 50);

        addPressImage(backGroundPath, endPath, qrCodePath, -70, 120);
        addPressImage(endPath, endPath, avatarPath, 70, 120);
        FileUtil.del(backGroundPath);
        FileUtil.del(qrCodePath);
        FileUtil.del(avatarPath);

        return endPath;
    }

    /**
     * 图片添加图片水印
     *
     * @param src        原文件路径
     * @param target     目标文件路径
     * @param pressImage 水印图片路径
     * @param x
     * @param y
     */
    private static void addPressImage(String src, String target, String pressImage, int x, int y) {
        ImgUtil.pressImage(
                FileUtil.file(src),
                FileUtil.file(target),
                ImgUtil.read(FileUtil.file(pressImage)), //水印图片
                x, //x坐标修正值。 默认在中间，偏移量相对于中间偏移
                y, //y坐标修正值。 默认在中间，偏移量相对于中间偏移
                1f
        );
    }

    /**
     * 把网络图片写入到指定路径
     *
     * @param url    图片地址
     * @param path   存储地址
     * @param width  存储图片的宽度
     * @param height 存储图片的高度
     */
    private static void readImageToPath(String url, String path, int width, int height) {
        File imageFile = FileUtil.file(path);
        HttpRequest.get(url).execute().writeBody(imageFile);
        Img.from(imageFile).scale(width, height).write(imageFile);
    }
}
